/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package geradorentidades;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
 *
 * @author Familia
 */
@Entity
@Table(name = "slw_item")
@NamedQueries({
    @NamedQuery(name = "SlwItem.findAll", query = "SELECT s FROM SlwItem s"),
    @NamedQuery(name = "SlwItem.findByIdItem", query = "SELECT s FROM SlwItem s WHERE s.idItem = :idItem"),
    @NamedQuery(name = "SlwItem.findByValidade", query = "SELECT s FROM SlwItem s WHERE s.validade = :validade"),
    @NamedQuery(name = "SlwItem.findByQuantInicial", query = "SELECT s FROM SlwItem s WHERE s.quantInicial = :quantInicial"),
    @NamedQuery(name = "SlwItem.findByDatAquisicao", query = "SELECT s FROM SlwItem s WHERE s.datAquisicao = :datAquisicao"),
    @NamedQuery(name = "SlwItem.findByValTotal", query = "SELECT s FROM SlwItem s WHERE s.valTotal = :valTotal"),
    @NamedQuery(name = "SlwItem.findByValorUnitario", query = "SELECT s FROM SlwItem s WHERE s.valorUnitario = :valorUnitario"),
    @NamedQuery(name = "SlwItem.findByQuantAtual", query = "SELECT s FROM SlwItem s WHERE s.quantAtual = :quantAtual")})
public class SlwItem implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Basic(optional = false)
    @Column(name = "ID_ITEM")
    private Long idItem;
    @Column(name = "VALIDADE")
    @Temporal(TemporalType.DATE)
    private Date validade;
    @Basic(optional = false)
    @Column(name = "QUANT_INICIAL")
    private int quantInicial;
    @Basic(optional = false)
    @Column(name = "DAT_AQUISICAO")
    @Temporal(TemporalType.DATE)
    private Date datAquisicao;
    @Basic(optional = false)
    @Column(name = "VAL_TOTAL")
    private long valTotal;
    @Basic(optional = false)
    @Column(name = "VALOR_UNITARIO")
    private long valorUnitario;
    @Column(name = "QUANT_ATUAL")
    private Integer quantAtual;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "slwItem")
    private List<SlwNotificacao> slwNotificacaoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "slwItem")
    private List<Armazenamento> slwArmazenamentoList;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "slwItem")
    private List<SlwMovimentacao> slwMovimentacaoList;
    @OneToMany(mappedBy = "slwItem")
    private List<SlwItem> slwItemList;
    @JoinColumn(name = "SLW_ITEM_ID_ITEM", referencedColumnName = "ID_ITEM")
    @ManyToOne
    private SlwItem slwItem;
    @JoinColumn(name = "UNIDADE_OPERACIONAL", referencedColumnName = "ID_UNIDADE")
    @ManyToOne(optional = false)
    private SlwUnidadeOperacional slwUnidadeOperacional;
    @JoinColumn(name = "TIPO_ARMAZENAMENTO", referencedColumnName = "COD_TIPO_ARMAZENAMENTO")
    @ManyToOne(optional = false)
    private SlwTipoArmazenamento slwTipoArmazenamento;
    @JoinColumn(name = "PRODUTO", referencedColumnName = "ID_PRODUTO")
    @ManyToOne(optional = false)
    private SlwProduto slwProduto;
    @JoinColumn(name = "FORNECEDOR", referencedColumnName = "ID_FORNECEDOR")
    @ManyToOne(optional = false)
    private SlwFornecedor slwFornecedor;

    public SlwItem() {
    }

    public SlwItem(Long idItem) {
        this.idItem = idItem;
    }

    public SlwItem(Long idItem, int quantInicial, Date datAquisicao, long valTotal, long valorUnitario) {
        this.idItem = idItem;
        this.quantInicial = quantInicial;
        this.datAquisicao = datAquisicao;
        this.valTotal = valTotal;
        this.valorUnitario = valorUnitario;
    }

    public Long getIdItem() {
        return idItem;
    }

    public void setIdItem(Long idItem) {
        this.idItem = idItem;
    }

    public Date getValidade() {
        return validade;
    }

    public void setValidade(Date validade) {
        this.validade = validade;
    }

    public int getQuantInicial() {
        return quantInicial;
    }

    public void setQuantInicial(int quantInicial) {
        this.quantInicial = quantInicial;
    }

    public Date getDatAquisicao() {
        return datAquisicao;
    }

    public void setDatAquisicao(Date datAquisicao) {
        this.datAquisicao = datAquisicao;
    }

    public long getValTotal() {
        return valTotal;
    }

    public void setValTotal(long valTotal) {
        this.valTotal = valTotal;
    }

    public long getValorUnitario() {
        return valorUnitario;
    }

    public void setValorUnitario(long valorUnitario) {
        this.valorUnitario = valorUnitario;
    }

    public Integer getQuantAtual() {
        return quantAtual;
    }

    public void setQuantAtual(Integer quantAtual) {
        this.quantAtual = quantAtual;
    }

    public List<SlwNotificacao> getSlwNotificacaoList() {
        return slwNotificacaoList;
    }

    public void setSlwNotificacaoList(List<SlwNotificacao> slwNotificacaoList) {
        this.slwNotificacaoList = slwNotificacaoList;
    }

    public List<Armazenamento> getSlwArmazenamentoList() {
        return slwArmazenamentoList;
    }

    public void setSlwArmazenamentoList(List<Armazenamento> slwArmazenamentoList) {
        this.slwArmazenamentoList = slwArmazenamentoList;
    }

    public List<SlwMovimentacao> getSlwMovimentacaoList() {
        return slwMovimentacaoList;
    }

    public void setSlwMovimentacaoList(List<SlwMovimentacao> slwMovimentacaoList) {
        this.slwMovimentacaoList = slwMovimentacaoList;
    }

    public List<SlwItem> getSlwItemList() {
        return slwItemList;
    }

    public void setSlwItemList(List<SlwItem> slwItemList) {
        this.slwItemList = slwItemList;
    }

    public SlwItem getSlwItem() {
        return slwItem;
    }

    public void setSlwItem(SlwItem slwItem) {
        this.slwItem = slwItem;
    }

    public SlwUnidadeOperacional getSlwUnidadeOperacional() {
        return slwUnidadeOperacional;
    }

    public void setSlwUnidadeOperacional(SlwUnidadeOperacional slwUnidadeOperacional) {
        this.slwUnidadeOperacional = slwUnidadeOperacional;
    }

    public SlwTipoArmazenamento getSlwTipoArmazenamento() {
        return slwTipoArmazenamento;
    }

    public void setSlwTipoArmazenamento(SlwTipoArmazenamento slwTipoArmazenamento) {
        this.slwTipoArmazenamento = slwTipoArmazenamento;
    }

    public SlwProduto getSlwProduto() {
        return slwProduto;
    }

    public void setSlwProduto(SlwProduto slwProduto) {
        this.slwProduto = slwProduto;
    }

    public SlwFornecedor getSlwFornecedor() {
        return slwFornecedor;
    }

    public void setSlwFornecedor(SlwFornecedor slwFornecedor) {
        this.slwFornecedor = slwFornecedor;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (idItem != null ? idItem.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof SlwItem)) {
            return false;
        }
        SlwItem other = (SlwItem) object;
        if ((this.idItem == null && other.idItem != null) || (this.idItem != null && !this.idItem.equals(other.idItem))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "geradorentidades.SlwItem[idItem=" + idItem + "]";
    }

}
